<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<!-- <script src="http://img.mukewang.com/down/540812440001e40e00000000.js" type="text/javascript"></script> -->
<script type="text/javascript" src="../jquery-2.1.1.js"></script>
<title></title>
</head>
<body>

多重选择器,逗号分隔处理
<button id="test1">通过split分组</button>
<button id="test2">sizzle的分组方式</button>

<div id="text">
  <p>
     <input type="text" />
  </p>
  <div class="aaron">
     <input type="checkbox" name="readme" />
     <input type="checkbox" name="ttt" />
     <input type="checkbox" name="aaa" />
     <p>慕课网</p>
  </div>
</div>

<div>
   <input type="checkbox" name="readme" />
   <input type="checkbox" name="ttt" />
   <input type="checkbox" name="aaa" />
   <p>Aaron</p>
</div>


<script type="text/javascript">
  

  //最简单的选择器
  // var selector = 'div.aaron input[name=ttt],div p';
  console.log($('div.aaron,div > p'))

  //最简单的选择器
  var selector = 'div,input';

  //常规分组，可以通过split
  $("#test1").click(function() {
    var soFar = selector.split(",");
    alert(soFar[0])
    alert(soFar[1])
  })


  //sizzle的分组方式
  $("#test2").click(function() {

      //分组
      var rcomma = /^[\x20\t\r\n\f]*,[\x20\t\r\n\f]*/;
      //TAG
      var TAG = /^((?:\\.|[\w*-]|[^\x00-\xa0])+)/;

      var soFar = selector;
      var match;
      var matched;
      var tokens;
      var groups = [];

      while (soFar) {

        //第一大块，分组关系
        //查找最左边的选择是不是逗号开头
        //matched用于处理第一进入
        //因为div input,div p 开始分解，第一个不是特殊符号
        if (!matched || (match = rcomma.exec(soFar))) {
          if (match) {
            // Don't consume trailing commas as valid
            soFar = soFar.slice(match[0].length) || soFar;
          }
          groups.push((tokens = []));
        }

        //退出处理
        matched = false;

        //第二大块，层级关系
        //  
        // 这里用的最简单的处理关系，
        // 不涉及层级关系
        // ............................
        //

        //第三大块，选择器
        match = TAG.exec(soFar)
        matched = match.shift();
        tokens.push({
          value   : matched,
          type    : 'TAG',
          matches : match
        });
        soFar = soFar.slice(matched.length);

        if (!matched) {
          break;
        }
      }

      console.log(groups)
  })




</script> 

</body>
</html>









